package cmd

import (
	"fmt"
	"log"
	"time"

	"gorm.io/gorm"

	"BookStack/internal/domain/page"
)

// 示例页面状态常量
const (
	SamplePageStatusDraft     int = 0 // 草稿
	SamplePageStatusPublished int = 1 // 已发布
)

// 示例页面结构
type samplePage struct {
	Title       string
	Slug        string
	Content     string
	Description string
	Status      int
	CreatedBy   uint
}

// CreateSamplePages 创建示例自定义页面
func CreateSamplePages(db *gorm.DB) error {
	log.Println("正在创建示例自定义页面...")

	// 获取管理员ID
	var adminUser struct {
		ID uint
	}
	if err := db.Table("users").Select("id").Where("role = ?", "superadmin").First(&adminUser).Error; err != nil {
		return fmt.Errorf("查询管理员账户失败: %v", err)
	}

	adminID := adminUser.ID
	if adminID == 0 {
		return fmt.Errorf("未找到管理员账户")
	}

	// 示例页面集合
	samplePages := []samplePage{
		{
			Title:       "关于我们",
			Slug:        "about-us",
			Content:     getAboutUsContent(),
			Description: "BookStack知识管理系统介绍",
			Status:      SamplePageStatusPublished,
			CreatedBy:   adminID,
		},
		{
			Title:       "隐私政策",
			Slug:        "privacy-policy",
			Content:     getPrivacyPolicyContent(),
			Description: "BookStack隐私保护政策",
			Status:      SamplePageStatusPublished,
			CreatedBy:   adminID,
		},
		{
			Title:       "免责声明",
			Slug:        "disclaimer",
			Content:     getDisclaimerContent(),
			Description: "BookStack免责声明",
			Status:      SamplePageStatusPublished,
			CreatedBy:   adminID,
		},
		{
			Title:       "广告合作",
			Slug:        "advertising",
			Content:     getAdvertisingContent(),
			Description: "BookStack广告合作机会",
			Status:      SamplePageStatusPublished,
			CreatedBy:   adminID,
		},
		{
			Title:       "意见反馈",
			Slug:        "feedback",
			Content:     getFeedbackContent(),
			Description: "向BookStack提交意见反馈",
			Status:      SamplePageStatusPublished,
			CreatedBy:   adminID,
		},
	}

	now := time.Now()

	// 逐个创建示例页面
	for _, sample := range samplePages {
		// 检查页面是否已存在
		var count int64
		db.Model(&page.Page{}).Where("slug = ?", sample.Slug).Count(&count)
		if count > 0 {
			log.Printf("页面'%s'已存在，跳过创建\n", sample.Title)
			continue
		}

		// 创建新页面
		newPage := page.NewPage(
			sample.Title,
			sample.Slug,
			sample.Content,
			sample.Description,
			sample.Status,
			sample.CreatedBy,
		)

		if newPage == nil {
			return fmt.Errorf("创建示例页面'%s'失败: 创建返回空对象", sample.Title)
		}

		// 设置创建时间
		newPage.CreatedAt = now
		newPage.UpdatedAt = now

		// 保存到数据库
		if err := db.Create(newPage).Error; err != nil {
			return fmt.Errorf("保存示例页面'%s'失败: %v", sample.Title, err)
		}

		log.Printf("示例页面'%s'创建成功\n", sample.Title)
	}

	log.Println("示例自定义页面创建完成")
	return nil
}

// 以下是示例页面内容

// getAboutUsContent 关于我们页面内容
func getAboutUsContent() string {
	return `
# 关于 BookStack

## 我们的使命

BookStack 致力于提供最佳的知识管理解决方案，帮助团队和个人更高效地组织、分享和获取知识。我们相信，知识的力量源于分享与协作，而不是孤立与封闭。

## 我们的团队

BookStack 团队由一群热爱知识管理和技术创新的专业人士组成。我们的团队成员来自不同的技术背景和行业领域，共同致力于打造最好用的知识库平台。

## 核心价值观

1. **简洁实用**：我们专注于设计简洁直观的用户界面，让知识管理变得轻松自然。
2. **开放协作**：我们鼓励团队内部的开放协作，相信集体智慧的力量。
3. **持续改进**：我们不断聆听用户反馈，持续完善产品功能和用户体验。
4. **安全可靠**：我们将用户数据安全放在首位，确保内容安全可靠。

## 产品特色

BookStack 提供全面的知识管理功能：

- **结构化内容**：通过书籍和章节结构，轻松组织复杂知识体系
- **强大编辑器**：支持 Markdown 格式，集成代码高亮、图表和媒体插入
- **版本控制**：记录内容的每一次变更，随时回滚到历史版本
- **协作编辑**：支持团队成员同时编辑和审阅内容
- **灵活权限**：精细的权限控制系统，确保信息安全
- **全文搜索**：快速查找任何内容，支持高级搜索语法
- **多语言支持**：界面支持多种语言，满足国际化需求
- **响应式设计**：在任何设备上都能获得良好的使用体验

## 公司历史

BookStack 项目始于 2020 年，最初是一个用于内部文档管理的工具。随着功能的不断完善和用户反馈的积累，我们决定将其发展成为一个面向所有组织和个人的开放平台。

2021 年初，BookStack 正式对外发布第一个公开版本，获得了用户的广泛好评。至今，我们已服务全球数千家企业和组织，帮助他们建立了高效的知识管理系统。

## 联系我们

如果您有任何问题、建议或合作意向，欢迎随时联系我们：

- **电子邮件**：contact@bookstack.example.com
- **官方网站**：www.bookstack.example.com
- **总部地址**：北京市海淀区中关村创新大厦 501 室

加入 BookStack，开启知识管理的全新旅程！
`
}

// getPrivacyPolicyContent 隐私政策页面内容
func getPrivacyPolicyContent() string {
	return `
# BookStack 隐私政策

*最后更新日期：2023年12月15日*

本隐私政策说明了 BookStack（"我们"、"我们的"或"BookStack"）如何收集、使用和披露您的个人信息，以及您与这些信息相关的选择。我们致力于保护您的隐私，并确保您的个人信息得到适当的保护。

## 1. 信息收集

### 1.1 您提供的信息

当您使用 BookStack 服务时，我们可能会收集以下信息：

- **账户信息**：当您注册账户时，我们收集您的姓名、电子邮件地址、密码和其他可选的个人资料信息。
- **内容数据**：我们存储您在服务中创建、上传或分享的内容，包括文档、评论和其他互动。
- **支付信息**：如果您订阅付费服务，我们会收集必要的支付详情，但完整的支付卡信息由我们的支付处理合作伙伴安全处理。
- **通信数据**：当您与我们沟通时，我们收集您提供的信息，包括支持请求和反馈。

### 1.2 自动收集的信息

我们还可能自动收集以下信息：

- **使用数据**：关于您如何使用服务的信息，如访问时间、使用的功能和查看的页面。
- **设备信息**：关于您用来访问服务的设备的信息，包括硬件型号、操作系统、浏览器类型和设备标识符。
- **日志数据**：服务器日志，包括IP地址、访问日期和时间、服务器响应时间和请求的网页。
- **Cookie和类似技术**：我们使用cookies和类似技术来收集有关您如何使用我们服务的信息。

## 2. 信息使用

我们使用收集的信息用于以下目的：

- 提供、维护和改进我们的服务
- 处理交易并发送相关信息
- 响应您的评论、问题和请求
- 发送技术通知、更新、安全警报和支持消息
- 监控和分析使用趋势和活动
- 检测、预防和解决欺诈和安全问题
- 遵守法律、法规义务

## 3. 信息共享

我们可能在以下情况下共享您的信息：

### 3.1 服务提供商

我们与帮助我们提供服务的第三方服务提供商共享信息，如云存储、支付处理和客户支持服务。这些提供商只能根据我们的指示处理信息，并受合同约束保护您的信息。

### 3.2 合规和保护

在以下情况下，我们可能会披露您的信息：
- 遵守法律义务、法院命令或法律程序
- 保护BookStack、我们的用户或公众的权利、财产或安全
- 调查潜在的违反我们服务条款的行为
- 防止可能违法、不道德或法律责任的活动

### 3.3 业务转让

如果BookStack涉及合并、收购或资产出售，您的信息可能会作为交易的一部分被转让。在这种情况下，我们将通知您并说明您的选择。

### 3.4 经您同意

我们可能在获得您明确同意的情况下与第三方共享您的信息。

## 4. 数据安全

我们实施适当的技术和组织措施，以保护您的个人信息免受意外丢失、未经授权的访问、使用、更改和披露。但是，没有任何电子传输或存储方法是100%安全的，因此我们不能保证绝对安全。

## 5. 数据保留

我们保留您的个人信息的时间不会超过实现本政策中描述的目的所需的时间，除非法律要求或允许更长的保留期。当不再需要信息时，我们将安全删除或匿名化处理。

## 6. 您的权利和选择

根据您所在地区的适用法律，您可能拥有以下权利：

- **访问权**：请求访问我们持有的关于您的个人信息副本
- **更正权**：要求更正不准确或不完整的个人信息
- **删除权**：在某些情况下，要求删除您的个人信息
- **反对权**：反对处理您的个人信息
- **限制权**：要求限制处理您的个人信息
- **数据可携权**：请求以结构化、常用和机器可读的格式接收您的数据
- **撤回同意权**：随时撤回您之前给予的任何同意

要行使这些权利，请通过以下联系方式与我们联系。

## 7. 国际数据传输

您的个人信息可能会传输到并存储在您所在国家/地区以外的国家/地区，这些国家/地区的数据保护法律可能与您所在国家/地区的法律不同。在这种情况下，我们将确保您的个人信息得到适当的保护。

## 8. 儿童隐私

我们的服务不面向13岁以下的儿童，我们不会故意收集13岁以下儿童的个人信息。如果我们发现已收集了13岁以下儿童的个人信息，我们将采取措施尽快删除这些信息。

## 9. 第三方链接

我们的服务可能包含指向第三方网站、产品或服务的链接。这些第三方有自己的隐私政策，我们对他们的做法不负责任。我们建议您查看这些第三方的隐私政策。

## 10. 隐私政策变更

我们可能会不时更新本隐私政策。如有重大变更，我们将通过在我们的网站上发布更新后的政策或直接向您发送通知来通知您。我们鼓励您定期查看本政策，以了解我们如何保护您的信息。

## 11. 联系我们

如果您对本隐私政策有任何问题或疑虑，请联系我们：

- **电子邮件**：privacy@bookstack.example.com
- **邮寄地址**：北京市海淀区中关村创新大厦501室
- **电话**：(+86) 10-1234-5678

感谢您信任 BookStack！
`
}

// getDisclaimerContent 免责声明页面内容
func getDisclaimerContent() string {
	return `
# 免责声明

*最后更新日期：2023年12月20日*

## 1. 内容免责声明

BookStack知识管理系统（以下简称"BookStack"或"我们"）尽力确保平台上发布的内容准确、完整和最新，但我们不对内容的准确性、完整性或适用性做出任何保证或承诺。

### 1.1 用户生成内容

- BookStack上的大部分内容由用户创建和维护。我们不对用户生成的内容进行事先审核。
- 用户发布的观点、建议和意见仅代表用户个人立场，不代表BookStack的官方立场或观点。
- 我们不保证用户发布的信息（包括但不限于文本、图片、视频、链接等）的准确性、完整性、可靠性或有效性。

### 1.2 信息时效性

- 平台上的信息可能会随时间变化而过时。我们不承诺持续更新所有内容以反映最新情况。
- 用户在依赖任何内容前应自行验证其时效性和准确性。

## 2. 使用风险声明

### 2.1 决策风险

- 用户基于平台上的信息做出的任何决策均由用户自行承担风险。
- 在做出重要决策前，我们建议用户查阅多个信息源并咨询相关专业人士。

### 2.2 技术风险

- 我们努力保持服务的连续性和稳定性，但不保证服务不会中断或出现技术问题。
- 用户应定期备份重要数据，以防系统故障导致数据丢失。

## 3. 第三方链接免责声明

- BookStack可能包含指向第三方网站或资源的链接，这些链接仅为方便用户而提供。
- 我们不控制这些第三方网站的内容或隐私政策，也不对其可用性、安全性或内容负责。
- 用户访问任何第三方网站的风险自行承担，应查阅并遵守第三方网站的使用条款和隐私政策。

## 4. 知识产权声明

- 除非另有说明，BookStack及其原始内容、功能和设计受版权、商标和其他知识产权法律保护。
- 用户通过平台发布的内容仍归用户所有，但用户授予BookStack使用、复制、修改、公开展示和分发该内容的权利。
- 未经授权使用BookStack知识产权的行为可能构成侵权。

## 5. 责任限制

在适用法律允许的最大范围内：

- BookStack及其管理人员、员工、合作伙伴和代理人对因使用或无法使用我们的服务而造成的任何直接、间接、附带、特殊、惩罚性或后果性损害不承担责任。
- 即使BookStack已被告知此类损害的可能性，我们的总责任在任何情况下均不超过用户在事件发生前12个月内为使用服务而支付的费用总额（如有）。

## 6. 变更通知

- 我们保留随时修改本免责声明的权利。修改后的版本将在平台上发布，并在发布时立即生效。
- 用户继续使用我们的服务将被视为接受修改后的免责声明。

## 7. 联系我们

如果您对本免责声明有任何疑问或建议，请联系我们：legal@bookstack.example.com

*通过使用BookStack，您确认已阅读、理解并同意遵守本免责声明的所有条款和条件。*
`
}

// getAdvertisingContent 广告合作页面内容
func getAdvertisingContent() string {
	return `
# 广告合作

BookStack提供多种广告和推广机会，帮助您的品牌、产品或服务接触到我们的用户群体。以下是我们提供的合作方式和详细信息。

## 我们的用户群体

BookStack拥有大量活跃的知识工作者和技术专业人士，主要包括：

- **IT专业人员**：开发者、系统管理员、架构师等
- **教育工作者**：教师、培训师、教育技术专家
- **企业用户**：项目经理、技术文档撰写者、知识管理人员
- **研究人员**：各领域的学术和商业研究者

我们平台每月平均有超过50万独立访问者，2百万页面浏览量，用户主要来自中国、北美和欧洲地区。

## 广告位置和形式

### 网站广告位

1. **首页横幅**
   - 位置：网站首页顶部或中部
   - 尺寸：728×90像素或970×250像素
   - 格式：静态图片、动态GIF或HTML5

2. **侧边栏广告**
   - 位置：网站侧边栏
   - 尺寸：300×250像素或300×600像素
   - 格式：静态图片、动态GIF

3. **内容页面广告**
   - 位置：文档内容页面中间或底部
   - 尺寸：728×90像素或300×250像素
   - 格式：静态图片、文本链接

### 赞助内容

1. **赞助文章**
   - 由您提供的相关内容，标记为"赞助内容"
   - 内容需与我们平台主题相关，并提供实际价值
   - 字数要求：800-2000字

2. **赞助专栏**
   - 为期一个月的专题内容赞助
   - 包括专栏页面顶部品牌展示和介绍
   - 可包含3-5篇相关文章

### 电子邮件营销

1. **电子邮件通讯赞助**
   - 在我们的周刊/月刊中展示您的品牌
   - 格式：文本+图片或纯文本
   - 位置：通讯顶部、中部或底部

2. **专题邮件**
   - 向我们的订阅用户发送一封专题邮件
   - 内容需经过我们的审核
   - 包含明确的赞助标识

## 广告价格

我们的广告价格根据位置、展示时间和形式而有所不同。请联系我们的广告团队获取最新价目表和可用性。

所有广告价格均基于以下因素：
- 广告位置和大小
- 展示时长（周/月/季度）
- 预计展示次数和点击率
- 季节性因素和特殊活动期间

## 广告政策

为确保用户体验和内容质量，我们对广告内容有严格要求：

1. **内容相关性**：广告内容应与BookStack用户兴趣相关
2. **设计质量**：广告设计应专业、美观且不影响用户体验
3. **禁止内容**：不接受含有误导性信息、不适当内容或违反法律法规的广告
4. **透明度**：所有赞助内容均明确标识为"赞助"或"广告"
5. **性能影响**：广告不应明显影响网站加载速度或性能

## 效果报告

我们为所有广告客户提供详细的效果报告，包括：

- 展示次数（Impressions）
- 点击次数和点击率（CTR）
- 独立访问者数量
- 地理位置和设备统计
- 停留时间和交互数据（适用于特定形式）

## 如何合作

若您有兴趣在BookStack投放广告或建立合作关系，请通过以下方式联系我们：

- **电子邮件**：advertising@bookstack.example.com
- **电话**：(+86) 10-8888-5555
- **在线表单**：[广告合作申请表](https://bookstack.example.com/advertising/apply)

我们的广告团队将在1-2个工作日内回复您，并根据您的需求提供个性化的合作方案。

## 成功案例

以下是一些与我们成功合作的广告客户案例：

1. **TechCloud云服务**：通过首页横幅广告，一个月内获得了超过2,000次点击和15%的转化率。
2. **CodeMaster IDE**：赞助专栏内容获得超过10,000次阅读，带来500+新用户注册。
3. **DevConf技术大会**：通过电子邮件推广，售出了200张大会门票，ROI达到400%。

*我们期待与您建立成功的广告合作关系，帮助您的品牌在技术和知识管理领域获得更多曝光和认可。*
`
}

// getFeedbackContent 意见反馈页面内容
func getFeedbackContent() string {
	return `
# 意见反馈

我们非常重视您的意见和建议，它们是我们不断改进的动力。请通过以下方式分享您的想法，帮助我们打造更好的BookStack。

## 反馈渠道

### 在线反馈表单

最直接的方式是使用我们的[在线反馈表单](https://feedback.bookstack.example.com)，您可以：

- 报告问题或错误
- 提出功能建议
- 分享使用体验
- 评价最新功能

我们的产品团队会定期审核所有提交的反馈。

### 电子邮件

您也可以通过电子邮件向我们发送详细的反馈：

**反馈邮箱**：feedback@bookstack.example.com

请在邮件中尽可能详细地描述您的问题或建议，包括：
- 明确的主题说明
- 问题的具体表现或建议的详细内容
- 如果是问题报告，请包含复现步骤和相关截图
- 您的联系方式（如果希望得到回复）

### 社区论坛

加入我们的[用户社区](https://community.bookstack.example.com)，您可以：
- 发布反馈和建议
- 与其他用户讨论
- 参与投票确定最受欢迎的功能请求
- 了解产品路线图和开发进展

### 社交媒体

在我们的社交媒体平台上留言：
- [微博 @BookStack官方](https://weibo.com/bookstack)
- [知乎 BookStack知识管理](https://zhihu.com/org/bookstack)
- [GitHub Issues](https://github.com/bookstack/bookstack/issues)（适合技术性反馈和问题报告）

## 反馈处理流程

1. **接收**：我们会记录所有收到的反馈
2. **分类**：根据内容分类（bug报告、功能请求、用户体验等）
3. **评估**：产品团队评估实施的可行性和优先级
4. **响应**：对重要反馈我们会直接回复
5. **实施**：被采纳的建议将纳入产品开发计划
6. **通知**：当您的建议被采纳并实施后，我们会通知您（如果您提供了联系方式）

## 常见问题类型

为了更高效地处理您的反馈，请在提交时考虑以下分类：

### 技术问题

- 功能无法正常工作
- 性能问题（速度慢、卡顿等）
- 兼容性问题（浏览器、设备等）
- 安全问题或漏洞报告

### 功能请求

- 新功能建议
- 现有功能改进
- 集成请求（与其他服务对接）
- 用户界面优化建议

### 内容反馈

- 文档错误或遗漏
- 翻译问题或改进建议
- 教程需求
- 示例不足或不清晰

### 用户体验

- 导航或使用流程不直观
- 设计或布局问题
- 无障碍访问建议
- 用户引导不足

## 奖励计划

为感谢用户积极提供高质量反馈，我们设立了"BookStack改进贡献者"奖励计划：

- **Bug猎人徽章**：报告重大bug并被确认
- **创意思想家徽章**：提出被采纳的创新功能建议
- **活跃贡献者积分**：定期提供有价值反馈的用户可获得积分
- **特别感谢墙**：在重大版本更新中，我们会特别感谢有突出贡献的用户

特别有价值的反馈还可能获得BookStack高级账户或其他奖励。

## 企业用户专属反馈

我们为企业客户提供专属反馈渠道：

- 指定客户成功经理
- 定期反馈收集会议
- 优先级评估和响应
- 定制化解决方案讨论

企业客户请联系您的客户经理或发送邮件至enterprise-feedback@bookstack.example.com

---

*您的每一条反馈都很重要，它们帮助我们理解用户需求，不断完善产品。感谢您抽出宝贵时间分享您的想法！*
`
}
